tests: Add test resetting the model
authorBenjamin Otte <otte@redhat.com>
Wed, 14 Dec 2011 12:49:31 +0000 (13:49 +0100)
committerBenjamin Otte <otte@redhat.com>
Fri, 16 Dec 2011 03:53:15 +0000 (04:53 +0100)
We first set a NULL model and then reset the old model, just to get the
effect of clearing and then resetting.

We reset the cursor and selection afterwards, so the reset doesn't
destroy all the work we did.

tests/testtreechanging.c

index f8b90ff2d5854edbf37a3f73a143c900ee20808d..106fc3704a27ee3cdde8eadeb62987e582c7599a 100644 (file)
@@ -63,7 +63,7 @@ log_operation_for_path (GtkTreePath *path,
 {
   char *path_string;
 
-  path_string = gtk_tree_path_to_string (path);
+  path_string = path ? gtk_tree_path_to_string (path) : g_strdup ("");
 
   g_printerr ("%10s %s\n", operation_name, path_string);
 
@@ -288,6 +288,39 @@ unselect (GtkTreeView *treeview)
                                     &iter);
 }
 
+static void
+reset_model (GtkTreeView *treeview)
+{
+  GtkTreeSelection *selection;
+  GtkTreeModel *model;
+  GList *list, *selected;
+  GtkTreePath *cursor;
+  
+  selection = gtk_tree_view_get_selection (treeview);
+  model = g_object_ref (gtk_tree_view_get_model (treeview));
+
+  log_operation_for_path (NULL, "reset");
+
+  selected = gtk_tree_selection_get_selected_rows (selection, NULL);
+  gtk_tree_view_get_cursor (treeview, &cursor, NULL);
+
+  gtk_tree_view_set_model (treeview, NULL);
+  gtk_tree_view_set_model (treeview, model);
+
+  if (cursor)
+    {
+      gtk_tree_view_set_cursor (treeview, cursor, NULL, FALSE);
+      gtk_tree_path_free (cursor);
+    }
+  for (list = selected; list; list = list->next)
+    {
+      gtk_tree_selection_select_path (selection, list->data);
+    }
+  g_list_free_full (selected, (GDestroyNotify) gtk_tree_path_free);
+
+  g_object_unref (model);
+}
+
 /* sanity checks */
 
 static void
@@ -363,7 +396,8 @@ dance (gpointer treeview)
     expand,
     collapse,
     select_,
-    unselect
+    unselect,
+    reset_model
   };
   guint i;